<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Git学习笔记</title>
    <link rel="stylesheet" href="./gitcontent.css">
</head>
<body>
    <div class="container">
        <header>
                Git 学习笔记
        </header>
        <article>
            <h2>一、Git基础</h2>
            <section>
                    <h3>添加配置</h3>
                    <ul>
                        <li>
                            git config [--local | --global | --system] user.name 'Your name'<br>
                            git config [--local | --global | --system] user.email 'Your email'
                            <h4>参数区别</h4>
                            <ol>
                                <li>git config --local ##只对某个仓库有效,切换到另外一个仓库失效</li>
                                <li>git config --global ##当前用户的所有仓库有效,工作当中最常用</li>
                                <li>git config --system ##系统的所有用户,几乎不用</li>
                            </ol>
                            <h4>查看配置</h4>
                            <ol>
                                <li>git config --list --local ##只能在仓库里面起作用, 普通路径git不管理</li>
                                <li>git config --list --global </li>
                                <li>git config --list --system </li>
                            </ol>
                        </li>
                    </ul>
            </section>
            <section>
                <h3>创建仓库并配置</h3>
                <ul>
                    <li>1、建仓库
                            <h4>已有项目</h4>
                            <ol>
                                <li>cd 项目所在的文件夹</li>
                                <li>git init</li>
                            </ol>
                        <h4>新建项目</h4>
                        <ol>
                            <li>cd到某个文件夹</li>
                            <li>git init project_name //会在当前路径下创建项目名称和文件夹</li>
                            <li>cd project_name</li>
                        </ol>
                    </li>
                    <li>
                        2、配置
                        <p>git config --local ##只对某个仓库有效,切换到另外一个仓库失效</p>
                    </li>
                    <li>
                        <h4>提交</h4>
                        <ol>
                            <li>git add file //添加到暂存区</li>
                            <li>git commit -m'描述'</li>
                        </ol>
                    </li>
                </ul>
            </section>
            <section>
                <h3>通过commit来区分工作区和暂存区</h3>
                <ul>
                    <li>
                        git add -u：将文件的修改、文件的删除，添加到暂存区。<br>
                        git add .：将文件的修改，文件的新建，添加到暂存区。<br>
                        git add -A：将文件的修改，文件的删除，文件的新建，添加到暂存区。<br>
                        工作中一般是用到 git add . 或者 git add -A, 今天学习更进一步解了 git add -u 以及他们之间的区别，谢谢苏玲老师讲的很详细<br>
                            <br>
                        git add -A相对于git add -u命令的优点 ： 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区，而git add -u 只能操作跟踪过的文件<br>
                        git add -A 等同于git add -all
                    </li>
                </ul>
            </section>
            <section>
                <h3>文件重命名的简便方法</h3>
                <ul>
                    <li>git mv 原文件名 更改的文件名</li>
                </ul>
            </section>
            <section>
                <h3>通过git log查看版本演变的历史</h3>
                <ul>
                    <li>
                        git log --all 查看所有分支的历史<br>
                        git log --all --graph 查看图形化的 log 地址<br>
                        git log --oneline 查看单行的简洁历史。<br>
                        git log --oneline -n4 查看最近的四条简洁历史。<br>
                        git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。<br>
                        git help --web log 跳转到git log 的帮助文档网页<br>
                    </li>
                </ul>
            </section>
            <section>
                <h3>gitk：通过图形界面工具来查看版本历史</h3>
            </section>
            <section>
                <h3>git 目录</h3>
                <ul>
                    <li>//cat命令主要用来查看文件内容，创建文件，文件合并，追加文件内容等功能。<br>
                        cat HEAD 查看HEAD文件的内容<br>
                        git cat-file 命令 显示版本库对象的内容、类型及大小信息。<br>
                        git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型<br>
                        git cat-file -s b44dd71d62a5a8ed3 显示版本库对象的大小<br>
                        git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容<br>
                        <br>
                        HEAD：指向当前的工作路径<br>
                        config：存放本地仓库（local）相关的配置信息。<br>
                        refs/heads:存放分支<br>
                        refs/tags:存放tag，又叫里程牌 （当这次commit是具有里程碑意义的 比如项目1.0的时候 就可以打tag）<br>
                        objects：存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成，前两位字符用来当文件夹，后38位做文件。<br>
                    </li>
                </ul>
            </section>
            <section>
                <h3>commit、tree和blob三个对象之间的关系</h3>
                <ul>
                    <li>commit --> tree --> blod</li>
                </ul>
            </section>
            <section>
                <h3>数一数tree的个数</h3>
                <li>
                    新建的git仓库，有且仅有1个commit，仅仅包含doc（1个tree）/readme（1个blob）
                </li>
            </section>
            <section>
                <h3>分离头指针情况下的注意事项</h3>
                <ul>
                    <li>
                        git checkout commitId：会出现分离头指针的情况，这种情况下比较危险，因为这个时候你提交的代码没有和分支对应起来，当切换到其他分支的时候(比如master分支)，容易丢失代码；<br>
                        但是分离头指针也有它的应用场景，就是在自己做尝试或者测试的时候可以分离头指针，当尝试完毕没有用的时候可以随时丢弃，但是如果觉得尝试有用，那么可以新建一个分支，使用 git branch <新分支的名称> commitId
                    </li>
                </ul>
            </section>
            <section>
                <h3>进一步理解HEAD和branch</h3>
                <ul>
                    <li>git checkout -b <新分支的名称> 父级 新建分支，并进入新分支</li>
                    <li>git checkout 分支名：切换分支</li>
                    <li>git diff commitId | HEAD (比较两个版本差异)</li>
                    <li>
                        <h4>HEAD的使用</h4>
                        <ol>
                            <li>一个节点，可以包含多个子节点（checkout 出多个分支）</li>
                            <li>一个节点可以有多个父节点（多个分支合并）</li>
                            <li>^是~都是父节点，区别是跟随数字时候，^2 是第二个父节点，而~2是父节点的父节点</li>
                            <li> ^和~可以组合使用,例如 HEAD~2^2</li>
                        </ol>
                    </li>
                </ul>
            </section>
        </article>
    </div>
</body>
</html>